package com.jsbs.iam.user.service;

import com.jsbs.iam.user.dto.*;
import com.jsbs.iam.user.entity.IamApplySystem;
import com.jsbs.iam.user.vo.ButtonInfoVo;
import com.jsbs.iam.user.vo.MenuManagerInfoVo;
import com.jsbs.iam.user.vo.MenuThreeVo;

import java.util.List;
import java.util.Map;

/**
 * @BelongsProject: iam
 * @BelongsPackage: com.jsbs.iam.user.service
 * @Author: WangJiYuan
 * @Description: TODO
 * @Version: 2023-01-04  18:39
 */
public interface MenuManagerService {
    /**
     * 获取菜单树信息
     * @param menuManagerSelectDto
     * @return
     */
    List<MenuThreeVo> getMenuThreeInfo(MenuManagerSelectDto menuManagerSelectDto);

    /**
     * 校验同级别名称唯一
     *
     * @param menuSuperiorCode
     * @param menuName
     * @param companyCode
     * @return
     */
    int verifyMenuName(String menuSuperiorCode, String menuName, String companyCode);

    /**
     * 新增菜单
     * @param menuAddDto
     */
    void addMenuInfo(MenuManagerAddDto menuAddDto);

    /**
     * 删除菜单数据
     * @param menuDeleteDto
     */
    void deleteMenuInfo(MenuManagerDeleteDto menuDeleteDto);

    /**
     * @param menuCode
     * @param companyCode
     * @return
     */
    MenuManagerInfoVo selectMenuData(String menuCode, String companyCode);

    /**
     * 获取菜单名称
     *
     * @param menuCode
     * @param companyCode
     * @return
     */
    String getMenuName(String menuCode, String companyCode);

    /**
     * 修改菜单数据
     * @param menuAddDto
     */
    void updateMenuInfo(MenuManagerAddDto menuAddDto);

    /**
     * 根据菜单编码获取对应层级
     * @param menuCode
     * @return
     */
    int verifyMenuLevel(String menuCode);

    /**
     * 菜单移动
     * @param menuAddDto
     */
    void moveMenu(MenuManagerAddDto menuAddDto);

    /**
     * 通过菜单编码获取按钮数据
     *
     * @param menuCode
     * @param companyCode
     * @return
     */
    List<ButtonInfoVo> selectButtonData(String menuCode, String companyCode);

    /**
     * 校验同级别按钮名称唯一
     *
     * @param menuCode
     * @param buttonName
     * @param companyCode
     * @return
     */
    int verifyButtonName(String menuCode, String buttonName, String companyCode);

    /**
     * 新增按钮数据
     * @param buttonAddDto
     */
    void addButtonInfo(ButtonAddDto buttonAddDto);

    /**
     * 获取按钮名称
     *
     * @param buttonCode
     * @param companyCode
     * @return
     */
    String getButtonName(String buttonCode, String companyCode);

    /**
     * 修改按钮数据
     * @param buttonAddDto
     */
    void updateButtonInfo(ButtonAddDto buttonAddDto);

    /**
     * 批量删除按钮数据
     * @param buttonDeleteDto
     */
    void deleteButtonData(ButtonDeleteDto buttonDeleteDto);

    /**
     * 修改按钮状态
     *
     * @param buttonStatusUpdateDto
     */
    void updateButtonStatus(ButtonStatusUpdateDto buttonStatusUpdateDto);

    /**
     * 获取所有应用数据
     *
     * @param params
     * @return
     */
    List<IamApplySystem> getApplyData(Map<String, String> params);
}
